home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / GEMBASE.D < prev    next >
Encoding:
Modula Definition  |  1990-10-13  |  7.3 KB  |  182 lines

  1. DEFINITION MODULE GEMBase;
  2.  
  3.  
  4. (*  System              : Megamax Modula-2 (MOS 2.2)
  5.  *  Autor & Copyright   : Manuel Chakravarty
  6.  *  Vertrieb            : Application Systems Heidelberg
  7.  *  Version             : 1.0 (V#0002)
  8.  *
  9.  *  Nach Anregungen von Michael Seyfried.
  10.  *)
  11.  
  12. (*  Dieses Modul soll das Programmieren von VDI- und AES-Aufrufen gestatten,
  13.  *  die die GEM-Library umgehen. Die Namen wurden soweit möglich direkt von
  14.  *  entsprechenden C-Bindings übernommen und deshalb sollte es unter
  15.  *  Zuhilfenahme entsprechender GEM-Literatur möglich sein dieses Modul ohne
  16.  *  große Erklärungen, die diesen Rahmen sprengen würden zu benutzen.
  17.  *
  18.  *  Die Prozeduren dieses Moduls lassen sich in zwei Kategorien aufteilen:
  19.  *  Abfrageroutinen und Aufrufroutinen. Erstere sind nur nötig, falls mit
  20.  *  schon bestehenden Anmeldungen beim AES oder VDI weitergearbeitet werden
  21.  *  soll (Anmeldungen, die ursprünglich von 'GEMEnv' durchgeführt wurden).
  22.  *  Die Aufrufroutinen dienen zum Benutzen einer VDI- bzw. AES-Funktion.
  23.  *  Es ist zu beachten, daß die automatischen Abmeldungen, wie z.B. das
  24.  *  Schließen aller noch offenen Fenster bei der Terminierung eines Prozesses
  25.  *  bei Aufrufen, die mit diesem Modul durchgeführt werden in der Eigenver-
  26.  *  antwortung des Programmierers bleiben und nicht mehr vom System kontrol-
  27.  *  liert werden.
  28.  *
  29.  *  Benutzen einer bestehenden Anmeldung beim AES (APPL_INIT):
  30.  *
  31.  *    i)  Ermitteln des AES-Parameterblocks mit 'GetPBs'
  32.  *    ii) Bei jedem Aufruf wird die Adresse auf den ermittelten Parameterblock
  33.  *        an 'CallAES' übergeben
  34.  *
  35.  *  Benutzen einer bestehenden Anmeldung beim VDI (OPEN [VIRTUAL] WORKSTATION)
  36.  *
  37.  *    i)   Ermitteln des VDI-Parameterblocks mit 'GetPBs'
  38.  *    ii)  Ermitteln der Gerätekennung mit 'VDIHandle'.
  39.  *    iii) Bei jedem Aufruf muß 'pb.pblock^.handle' die in ii) ermittelte
  40.  *         Kennung zugewiesen werden und dann wird die Adresse auf den er-
  41.  *         mittelten VDI-Parameterblock an 'CallVDI' übergeben
  42.  *
  43.  *  Anwendungsbeispiele finden sich im DEMO-Ordner: AESDEMO.M und VDIDEMO.M!
  44.  *
  45.  *  ACHTUNG: Bei der Verwendung dieses Moduls können auf einfachste Weise
  46.  *           die herlichsten Abstürze erzeugt werden oder die GEM-Library
  47.  *           in Verwirrung gebracht werden. Daher sollte es nur verwendet
  48.  *           werden, sobald es unbedingt nötig ist und man ausreichend mit
  49.  *           dem GEM vertraut ist.
  50.  *)
  51.  
  52.  
  53. FROM    SYSTEM  IMPORT  ADDRESS;
  54.  
  55. FROM    GEMEnv  IMPORT  GemHandle, DeviceHandle;
  56.  
  57.  
  58. TYPE    IntinArray      = ARRAY[0..127] OF INTEGER;
  59.         IntoutArray     = ARRAY[0..127] OF INTEGER;
  60.         PtsinArray      = ARRAY[0..511] OF INTEGER;
  61.         PtsoutArray     = ARRAY[0..11]  OF INTEGER;
  62.         AdrinArray      = ARRAY[0..2]   OF ADDRESS;
  63.         AdroutArray     = ARRAY[0..1]   OF ADDRESS;
  64.         PtrIntinArray   = POINTER TO IntinArray;
  65.         PtrIntoutArray  = POINTER TO IntoutArray;
  66.         PtrPtsinArray   = POINTER TO PtsinArray;
  67.         PtrPtsoutArray  = POINTER TO PtsoutArray;
  68.         PtrAdrinArray   = POINTER TO AdrinArray;
  69.         PtrAdroutArray  = POINTER TO AdroutArray;
  70.  
  71.         (*  VDI-Typen *)
  72.  
  73.         VDIContrlArray  = RECORD
  74.                             opcode      : CARDINAL;
  75.                             sptsin      : CARDINAL;
  76.                             sptsout     : CARDINAL;
  77.                             sintin      : CARDINAL;
  78.                             sintout     : CARDINAL;
  79.                             subcmd      : CARDINAL;
  80.                             handle      : INTEGER;
  81.                             multi1      : INTEGER;
  82.                             multi2      : INTEGER;
  83.                             multi3      : INTEGER;
  84.                             multi4      : INTEGER;
  85.                             multi5      : INTEGER;
  86.                           END;
  87.         PtrVDIContrlArray= POINTER TO VDIContrlArray;
  88.  
  89.         (*  VDI-Parameterblock
  90.          *)
  91.         VDIPB           = RECORD
  92.                             pblock      : PtrVDIContrlArray;
  93.                             iioff       : PtrIntinArray;
  94.                             pioff       : PtrPtsinArray;
  95.                             iooff       : PtrIntoutArray;
  96.                             pooff       : PtrPtsoutArray;
  97.                           END;
  98.         PtrVDIPB        = POINTER TO VDIPB;
  99.         
  100.         
  101.         (*  AES-Typen  *)
  102.         
  103.         AESContrlArray  = RECORD
  104.                             opcode      : CARDINAL;
  105.                             sintin      : CARDINAL;
  106.                             sintout     : CARDINAL;
  107.                             sadrin      : CARDINAL;
  108.                             sadrout     : CARDINAL;
  109.                           END;
  110.         PtrAESContrlArray= POINTER TO AESContrlArray;
  111.  
  112.         GlobalArray     = RECORD
  113.                             version     : INTEGER;
  114.                             count       : INTEGER;
  115.                             id          : INTEGER;
  116.                             pprivate    : ADDRESS;
  117.                             ptree       : ADDRESS;
  118.                             pmem        : ADDRESS;
  119.                             lmem        : INTEGER;
  120.                             nplanes     : INTEGER;
  121.                             resvd11     : INTEGER;
  122.                             resvd12     : INTEGER;
  123.                             bvdisk      : BITSET;
  124.                             bvhard      : BITSET;
  125.                           END;
  126.         PtrGlobalArray  = POINTER TO GlobalArray;
  127.                  
  128.         (*  AES-Parameterblock
  129.          *)
  130.         AESPB           = RECORD
  131.                             pcontrl     : PtrAESContrlArray;
  132.                             pglobal     : PtrGlobalArray;
  133.                             pintin      : PtrIntinArray;
  134.                             pintout     : PtrIntoutArray;
  135.                             padrin      : PtrAdrinArray;
  136.                             padrout     : PtrAdroutArray;
  137.                           END;
  138.         PtrAESPB        = POINTER TO AESPB;
  139.  
  140.  
  141.                         (*  Abfrageroutinen  *)
  142.                         (*  ===============  *)
  143.  
  144. PROCEDURE GetPBs (gemHdl: GemHandle; VAR vdipb: VDIPB; VAR aespb: AESPB);
  145.  
  146.         (*  Liefert die Parmeterblöcke zu einer GEM-Referenz.
  147.          *
  148.          *  Die zurückgelieferten Parameterblöcke sind eine Kopie der
  149.          *  Blöcke, die von der GEM-Library beim Aufruf einer VDI- bzw.
  150.          *  AES-Routine benutzt werden, falls 'gemHdl' die zu diesem Zeit-
  151.          *  punkt aktuelle GEM-Referenz ist (siehe 'GEMEnv.CurrGemHandle).
  152.          *  Ist einer der Parameterblöcke mit dem Wert 'NIL' gefüllt, so
  153.          *  kann die übergebene GEM-Referenz für entsprechende Aufrufe
  154.          *  (AES bzw. VDI) nicht benutzt werden.
  155.          *)
  156.  
  157. PROCEDURE VDIHandle (device: DeviceHandle): INTEGER;
  158.  
  159.         (*  Liefert die zu einem Gerät gehörende VDI-Gerätekennung.
  160.          *)
  161.  
  162.  
  163.                         (*  Aufrufroutinen  *)
  164.                         (*  ==============  *)
  165.  
  166. PROCEDURE CallVDI (ptrpb: PtrVDIPB);
  167.  
  168.         (*  Ruft das VDI auf.
  169.          *
  170.          *  'ptrpb' spezifiziert den zu benutzenden Parameterblock.
  171.          *)
  172.  
  173. PROCEDURE CallAES (ptrpb: PtrAESPB);
  174.  
  175.         (*  Ruft das AES auf.
  176.          *
  177.          *  'ptrpb' spezifiziert den zu benutzenden Parameterblock.
  178.          *)
  179.  
  180.  
  181. END GEMBase.
  182.